# -*- coding: utf-8 -*-
"""
Created on Mon Aug 21 09:14:24 2023

@author: skunk69
"""

import json

chinese_name = u'职业延迟满足量表'
english_name = 'Occupational Delay of Gratification Scale'
abbreviation = 'ODGS'
category = u'职业价值、态度量表'

outline = u"""职业延迟满足（Occupational Delay of Gratification）是指个体在其职业领域中，为了在未来获得更多的回报，或达到更高的职业目标，而甘愿放弃眼前相对较小的利益的抉择取向，以及在等待或实现目标的过程中进行自我控制和克服困难、努力实现长远目标的能力，是一种职业成熟的表现。
《职业延迟满足量表》（Occupational Delay of Gratification Scale, ODGS）由梁海霞和戴晓阳于2008年编制，该量表在参考以往延迟满足研究的基础上，提出了职业延迟满足的操作性定义，通过整合延迟满足的2个经典实验研究范式——自我延迟范式和礼物延迟范式，建构了职业延迟满足的理论维度。该量表理论结构包括职业延迟满足过程和延迟满足特质两大部分。其中，职业延迟满足过程又可分为延迟选择和延迟维持2个阶段，延迟满足特质也包含延迟信念和延迟行为两个方面的内容。"""

instruction = u"""您好！这是一份关于职业延迟满足的量表。下面是一些与工作、生活有关的情景，不存在好坏、对错之分，请按照您的真实想法在A和B两个选项中选择一个，在选项上面画“√”，不要多选也不要漏选。如果您从未经历过某种情景，就请您想象一下，然后做出选择。我们承诺对您的资料严格保密。完成这份问卷可能会耽误您一点宝贵的事件，再次我向您表示衷心的感谢！"""

with open('ODGS.txt','r',encoding='utf-8') as f:
    lines = f.readlines()
    f.close()

items = {}
for line in lines[::3]:
    key,value = line.strip().split('.',maxsplit=1)
    items[key.strip()] = value.strip()

rating = {}
A_lines = [line.strip() for line in lines[1::3]]
B_lines = [line.strip() for line in lines[2::3]]

for i in range(len(A_lines)):
    rate = {}
    key,value = A_lines[i].split('.',maxsplit=1)
    rate[key] = value.strip()
    key,value = B_lines[i].split('.',maxsplit=1)
    rate[key] = value.strip()
    rating[i+1] = rate

reverse_items = []
scales = [u'职业延迟满足过程',u'延迟满足特质']
scales_items = [
    [1,2,5,9,12,13,15,16,18,20,21,22,23],# 职业延迟满足过程
    [3,4,6,7,8,10,11,14,17,19,24],# 延迟满足特质
    ]

# check scales_items
print(f'scale length={[len(l) for l in scales_items]}')

check = []
for l in scales_items:
    check = check+l
print(f'len(check)={len(check)}')

# complementary set
check_set = {i for i in sorted(check)}^{i for i in range(1,25)}
print(f'complementary set= {check_set}')

factors = []
factors_scales = []

score_rules = {}
st_lines = """1.A 2.B 3.A 4.A 5.B 6.B 7.A 8.B 9.B 10.B 11.B 12.B 13.B 14.A 15.B 16.A 17.A 18.A 19.B 20.B 21.B 22.A 23.A 24.A"""
st_lines = st_lines.split()
for st_line in st_lines:
    key,value = st_line.split('.')
    score_rules[key.strip()] = value.strip()

contents = {
    'instruction':instruction,
    'items':items,
    'reverse_items':reverse_items,
    'scales':scales,
    'scales_items':scales_items,
    'factors':factors,
    'factors_scales':factors_scales,
    'rating':rating,
    'score_rules':score_rules       
    }

implementation = u"""《职业延迟满足量表》属于一个自评量表。"""

reliability = u"""正式样本为职业性质和地区各不相同的工作者。职业延迟满足过程和延迟满足特质分量表的内部一致性 α系数分别为0.787和0.61，全量表为0.809。采用皮尔逊积差相关方法计算间隔两周后的重测信度，职业延迟满足过程和延迟满足特质分量表以及全量表的重测信度系数分别为0.655、0.982和0.971，P<0.01。"""
validity = u"""在结构效度方面，对2个分量表的条目分别进行探索性因子分析，结果表明，与假设的二因子模型相吻合。
在效标效度方面，编制者对正式施测的样本同时施测张静红和戴晓阳2008年3月修订的通用延迟满足量表，结果表明总量表与通用延迟满足量表的相关为0.456（P<0.01），职业延迟满足过程和延迟满足特质分量表与其相关分别为0.268（P<0.05）和0.457（P<0.01）。
在实证效度方面，采用对被试工作绩效的定量评估结果作为效标来加以验证。结果显示，《职业延迟满足量表》与工作绩效的定量评估结果的相关达到0.819（P<0.01）。"""
measurements = {'reliability':reliability,'validity':validity}

interpretation = u"""职业延迟满足过程分量表，反映被试在职业领域的延迟满足能力。
延迟满足特质分量表，反映被试一般的延迟满足特征。
所有24个条目得分之和即为该量表的总分，反映了被测者职业延迟的总体状况。
具体使用时2个分量表可以同时使用，也可是对具体情况分别选用。
计分方法采用破选法：选择延迟满足选项记1分选择及时满足选项记0分。
条目标准答案如下(记1分)：1.A 2.B 3.A 4.A 5.B 6.B 7.A 8.B 9.B 10.B 11.B 12.B 13.B 14.A 15.B 16.A 17.A 18.A 19.B 20.B 21.B 22.A 23.A 24.A。"""

applications = u"""实际应用效果有待后续研究证实。"""

this_scale = {
    'chinese_name':chinese_name,
    'english_name':english_name,
    'abbreviation':abbreviation,
    'category':category,
    'outline':outline,
    'contents':contents,
    'implementation':implementation,
    'measurements':measurements,
    'interpretation':interpretation,
    'applications':applications    
    }

with open(abbreviation+'.json','w+',encoding='utf-8') as f:
    json.dump(this_scale,f,indent=2,ensure_ascii=False)